package net.lab1024.sa.admin.module.business.datasource.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import net.lab1024.sa.admin.module.business.datasource.domain.form.QueryHistoryQueryForm;
import net.lab1024.sa.admin.module.business.datasource.domain.form.SqlExecuteForm;
import net.lab1024.sa.admin.module.business.datasource.domain.vo.DatabaseObjectVO;
import net.lab1024.sa.admin.module.business.datasource.domain.vo.QueryHistoryVO;
import net.lab1024.sa.admin.module.business.datasource.domain.vo.QueryResultVO;
import net.lab1024.sa.base.common.domain.ResponseDTO;

import java.util.List;

/**
 * 数据库管理Service
 *
 * @Author 1024创新实验室-主任:卓大
 * @Date 2024-01-01 00:00:00
 * @Wechat zhuoda1024
 * @Email lab1024@163.com
 * @Copyright <a href="https://1024lab.net">1024创新实验室</a>
 */
public interface DatabaseManagerService {

    /**
     * 获取数据库对象列表
     *
     * @param datasourceId 数据源ID
     * @param objectType 对象类型
     * @return 数据库对象列表
     */
    ResponseDTO<List<DatabaseObjectVO>> getDatabaseObjects(Long datasourceId, String objectType);

    /**
     * 执行SQL查询
     *
     * @param form SQL执行表单
     * @return 查询结果
     */
    ResponseDTO<QueryResultVO> executeQuery(SqlExecuteForm form);

    /**
     * 执行SQL更新
     *
     * @param form SQL执行表单
     * @return 执行结果
     */
    ResponseDTO<QueryResultVO> executeUpdate(SqlExecuteForm form);

    /**
     * 获取表结构信息
     *
     * @param datasourceId 数据源ID
     * @param tableName 表名
     * @return 表结构信息
     */
    ResponseDTO<QueryResultVO> getTableStructure(Long datasourceId, String tableName);

    /**
     * 获取查询历史
     *
     * @param form 查询表单
     * @return 查询历史
     */
    ResponseDTO<Page<QueryHistoryVO>> getQueryHistory(QueryHistoryQueryForm form);

    /**
     * 保存查询历史
     *
     * @param datasourceId 数据源ID
     * @param sqlContent SQL内容
     * @param executionTime 执行时间
     * @param rowCount 影响行数
     * @param status 状态
     * @param errorMessage 错误信息
     */
    void saveQueryHistory(Long datasourceId, String sqlContent, Integer executionTime, 
                         Integer rowCount, Integer status, String errorMessage);
} 